package com.dtx.mediator;

import java.awt.*;
import java.awt.event.TextEvent;
import java.awt.event.TextListener;

/**
 * ColleagueTextField类是java.awt.TextField的子类,它不仅实现了Colleague接口,还实现了java.awt.event.TextListener接口。
 * 这是因为我们希望通过了textValueChanged方法捕捉到文本内容发生变化这一事件,并通知中介者。
 * 在Java语言中,我们虽然无法继承(extends)多个类,但是我们可以实现(implements)多个接口。在setColleagueEnabled方法中,
 * 我们不仅调用了setEnabled方法,还调用了setBackground方法。这是因为我们希望在启用控件后,将它的背景色改为白色;
 * 禁用控件后,将它的背景色改为灰色。
 * textValueChanged方法是在TextListener接口中定义的方法。当文本内容发生变化时,AWT框架会调用该方法。
 * 在示例程序中,textValueChanged方法调用了colleagueChanged方法,这是在向中介者表达“对不起,文本内容有变化,请处理。”的意思。
 */
public class ColleagueTextField extends TextField implements TextListener,Colleague {

    private Mediator mediator;

    /**
     * 构造函数
     * @param text
     * @param columns
     */
    public ColleagueTextField(String text,int columns){
        super(text,columns);
    }

    /**
     * 保存Mediator
     * @param mediator
     */
    @Override
    public void setMediator(Mediator mediator) {
        this.mediator = mediator;
    }

    /**
     * Mediator下达启用/禁用指示
     * @param enabled
     */
    @Override
    public void setColleagueEnabled(boolean enabled) {
        setEnabled(enabled);
        setBackground(enabled ? Color.white : Color.lightGray);
    }

    /**
     * 当文字发生变化时通知Mediator
     * @param e
     */
    @Override
    public void textValueChanged(TextEvent e) {
        mediator.colleagueChanged();
    }
}
